﻿using System.Drawing;
using ttbit.form;

namespace bin.imgconv
{
    internal class Program
    {


        static void Main(string[] args)
        {
            //TTImg 支持 Pal8 （256色调色板） Gray8（256级别单通道）P8A3 
            Console.WriteLine("此工具将图片文件转换为TTImg 格式");
            Console.WriteLine("format 取值如下:");
            Console.WriteLine("     Pal8 256色调色板");
            Console.WriteLine("     P5A3 32色调色板 + 8级透明度");
            Console.WriteLine("     Gray 256级单通道");
            Console.WriteLine("需要三个参数，源图片，目标格式，调色板图片，");
            Console.WriteLine("调色板图片对于Pal8格式来说为 256xN 的 图像文件，如果图像总发色数<=255,可以自动产生调色板文件，此格式0号色固定为透明");
            Console.WriteLine("调色板图片对于P5A3来说为 32xN 的 图像文件，如果图像总发色数<=32,可以自动产生调色板文件");
            Console.WriteLine("Bin.ImgConv  abc.png format [pal.png]");//这个工具还需要一个有GUI的版本。

            var srcpic = args[0];
            var b = Enum.TryParse<TTIMGFormat>(args[1], true, out var format);
            if (!b)
                throw new Exception("Error format.");
            string palpic = null;
            if (args.Length > 2)
            {
                palpic = args[2];
            }
            Console.WriteLine("srcpic=" + srcpic);
            Console.WriteLine("format=" + format);
            Console.WriteLine("palpic=" + palpic);
            bool needpal = (format == TTIMGFormat.PAL8 || format == TTIMGFormat.P5A3);

            var srcimg = StbImageSharp.ImageResult.FromMemory(System.IO.File.ReadAllBytes(srcpic), StbImageSharp.ColorComponents.RedGreenBlueAlpha);
            StbImageSharp.ImageResult palimg = null;
            if (needpal && palpic != null)
            {
                palimg = StbImageSharp.ImageResult.FromMemory(System.IO.File.ReadAllBytes(palpic), StbImageSharp.ColorComponents.RedGreenBlue);
            }
            var img = ImgConv.ConvertTexture(srcimg, format, palimg);
            var path = System.IO.Path.GetDirectoryName(srcpic);
            var name = Path.GetFileNameWithoutExtension(srcpic);
            var filename = System.IO.Path.Combine(path, name + ".ttimg");
            using (var fs = System.IO.File.OpenWrite(filename))
            {
                using (var ws = new BinaryWriter(fs))
                {
                    img.Write(ws);
                }
            }
            Console.WriteLine("Done.Write=" + filename);
        }
    }
}